home *** CD-ROM | disk | FTP | other *** search
/ Aminet 5 / Aminet 5 - March 1995.iso / Aminet / util / cli / shellsort.lha / shellsort / shellsort.s < prev   
Text File  |  1995-01-16  |  14KB  |  604 lines

  1.  
  2. ;exec.library
  3. allocmem    =    -198
  4. freemem        =    -210
  5. oldopenlibrary    =    -408
  6. closelibrary    =    -414
  7.  
  8. ;dos.library
  9. open        =    -30
  10. close        =    -36
  11. read        =    -42
  12. write        =    -48
  13. output        =    -60
  14. lock        =    -84
  15. unlock        =    -90
  16. examine        =    -102
  17.  
  18.  
  19.     movem.l    d1-d7/a1-a6,-(a7)
  20. ;-------------
  21.     move.l    $4.w,a6
  22.     movem.l    d0/a0,-(a7)
  23.     lea    doslib,a1
  24.     jsr    oldopenlibrary(a6)
  25.     move.l    d0,a5
  26.     movem.l    (a7)+,d0/a0        ;vrati registre
  27.     move.l    a5,dosbase        ;sacuvaj bazu
  28.  
  29.     cmp.l    #1,d0            ;ako nema ulaza
  30.     beq.w    kraj            ;idi na kraj
  31.     cmp.b    #$3f,(a0)        ;da li je prvi znak '?'
  32.     beq.w    kraj
  33.     
  34.     lea    ponovo,a1
  35.     move.l    a1,case
  36.  
  37.     move.l    a0,a2            ;privremeno spremi
  38. ima_li    lea    buff,a1
  39.     bsr.w    string            ;procitaj prvi string sa ulaza
  40.     cmp.b    #"-",(a1)        ;da li je to neka opcija
  41.     bne.b    nista
  42.     cmp.b    #'n',buff+1
  43.     bne.b    nije_n
  44.     bset.b    #0,flag            ;postavi bit za opciju "-n"
  45.     move.l    a0,a2
  46.     bra.b    ima_li
  47. nije_n    cmp.b    #'o',buff+1
  48.     bne.b    nije_o
  49.     bset.b    #1,flag            ;postavi bit za opciju "-o"
  50.     move.l    a0,a2
  51.     move.l    #buff,a1        ;
  52.     addq.l    #2,a1            ;
  53.     moveq    #0,d0            ;
  54.     move.l    d0,d1            ;prevodjenje ascii niza
  55.     cmp.b    #$30,(a1)        ; u broj
  56.     beq.b    nista            ;
  57. rac_of    move.b    (a1)+,d0        ;
  58.     sub.b    #$30,d0            ;
  59.     add.l    d0,d1            ;
  60.     tst.l    (a1)            ;
  61.     beq.b    putoff            ;
  62.     mulu    #10,d1            ;
  63.     bra.b    rac_of            ;
  64. putoff    move.b    d1,offset
  65.     bra.b    ima_li
  66. nije_o    cmp.b    #'c',buff+1
  67.     bne.b    nista
  68.     bset.b    #2,flag            ;postavi bit za opciju "-c"
  69.     move.l    a0,a2
  70.     lea    pon1,a3
  71.     move.l    a3,case
  72.     bra.w    ima_li
  73. nista    move.l    a2,a0
  74.     lea    ulaz,a1
  75.     bsr.w    string            ;procitaj ime ulaznog filea
  76.     lea    izlaz,a1        ;procitaj ime izlaznog filea
  77.     bsr.w    string
  78. ;***********************************************************************
  79.     jsr    output(a5)
  80.     move.l    d0,d1
  81.     move.l    #reading,d2
  82.     moveq    #$0b,d3
  83.     jsr    write(a5)        ;write text "reading..."
  84.  
  85.     move.l    #$108,d0        ;264 bajta za FileInfoBlock
  86.     moveq    #00,d1
  87.     jsr    allocmem(a6)
  88.     tst.l    d0
  89.     bne.b    l1
  90.     bsr.w    memo
  91.     bra.w    kraj2            ;ako nema memorije, zavrsi
  92.  
  93. l1    move.l    d0,a4            ;sacuvaj
  94.  
  95.     move.l    #ulaz,d1        ;pointer na ime filea
  96.     move.l    #-2,d2            ;shared lock
  97.     jsr    lock(a5)        ;lock
  98.  
  99.     tst.l    d0
  100.     bne.b    l2
  101.     bsr.w    error11
  102.     bra.w    kraj2            ;problem sa ulaznim fileom
  103.  
  104. l2    move.l    d0,-(a7)        ;sacuvaj
  105.     move.l    d0,d1            ;lock pointer
  106.     move.l    a4,d2            ;adresa u memoriji
  107.     jsr    examine(a5)        ;examine file
  108.  
  109.     tst.l    d0
  110.     bne.b    l3
  111.     bsr.w    error11
  112.  
  113. l3    move.l    $7c(a4),size        ;spremi duzinu filea
  114.  
  115.     move.l    #$108,d0
  116.     move.l    a4,a1
  117.     jsr    freemem(a6)        ;oslobodi memoriju 264 bajta
  118.  
  119.     move.l    (a7)+,d1        ;vrati lock pointer
  120.     jsr    unlock(a5)        ;unlock
  121. ;-------------
  122.     move.l    size,d0
  123.     moveq    #00,d1
  124.     jsr    allocmem(a6)        ;alociraj prostor za file
  125.     tst.l    d0
  126.     bne.b    l4
  127.  
  128.     bsr.w    memo
  129.     bra.w    dealloc4
  130.  
  131. l4    move.l    d0,a4            ;spremi pointer
  132.     move.l    d0,source
  133. ;-------------
  134.     move.l    #ulaz,d1
  135.     move.l    #1005,d2
  136.     jsr    open(a5)        ;open input file
  137.     tst.l    d0
  138.     bne.b    l5
  139.  
  140.     bra.w    error1            ;ako je NULL pointer, zavrsi
  141.  
  142. l5    move.l    d0,-(a7)        ;spremi file pointer
  143.  
  144.     move.l    d0,d1
  145.     move.l    a4,d2
  146.     move.l    size,d3
  147.     jsr    read(a5)        ;read input file
  148.     tst.l    d0
  149.     bne.b    l6
  150.  
  151.     bra.w    error1
  152.  
  153. l6    move.l    d0,length        ;spremi duzinu procitanih bajta
  154.     cmp.l    size,d0            ;usporedi broj procitanih bajta sa
  155.     bne.w    error1            ;duzinom filea i po potrebi reagiraj
  156.  
  157.     move.l    (a7)+,d1        ;vrati file pointer
  158.     jsr    close(a5)        ;close input file
  159. ;*************************************************************************
  160.     clr.l    d5            ;ocisti brojac linija
  161.     move.l    length,d0        ;vrati duzinu filea
  162.     moveq    #10,d3            ;LINE FEED
  163.     btst.b    #0,flag            ;koje citanje filea koristiti
  164.     bne.b    bb
  165.  
  166.     bra.w    ba
  167.  
  168.     EVEN
  169. ba     subq.l    #1,d0            ;smanji brojac znakova
  170.     bmi.b    otislo            ;da li smo procitali sve znakove
  171.     cmp.b    (a4)+,d3        ;da li je znak LINE FEED
  172.     bne.b    ba            ;skoci ako nije LF
  173.     
  174.     addq.l    #1,d5            ;dodaj 1 broju linija    
  175.     bra.b    ba
  176. ;-------------
  177. bb
  178.     moveq    #$20,d1            ;SPACE
  179.     bra.b    b21
  180.  
  181. b11    addq.l    #1,a4            ;povecaj adresu
  182.     subq.l    #1,d0            ;smanji brojac znakova
  183.     bmi.b    otislo            ;zavrsi
  184.  
  185. b21    cmp.b    (a4),d1            ;da li je SPACE ili manje
  186.     bge.b    b11
  187.  
  188. bc     subq.l    #1,d0            ;smanji brojac znakova
  189.     bmi.b    otislo
  190.     cmp.b    (a4)+,d3        ;da li je znak LINE FEED
  191.     bne.b    bc            ;skoci ako nije LF
  192.  
  193.     addq.l    #1,d5            ;dodaj 1 broju linija
  194.     bra.b    b21
  195. ;-------------
  196. otislo
  197.     moveq    #-1,d7
  198.     cmp.b    (a4),d7            ;ako zadnji red nema LF, nego samo
  199.     bne.b    l61            ; EOF, tada zabiljezi zadnji red
  200.     addq.l    #1,d5            ; kao jos jedan red vise
  201.  
  202. l61    move.l    d5,no_of_lines        ;broj linija
  203.     
  204.     add.l    d5,d5
  205.     add.l    d5,d5            ;mnozi sa 4
  206.     addq.l    #4,d5            ;dodaj jos 4 bajta
  207.     move.l    d5,d0
  208.     move.l    d5,size2
  209.     moveq    #00,d1
  210.     jsr    allocmem(a6)        ;alociraj prostor za polje pointera
  211.     tst.l    d0
  212.     bne.b    l7
  213.  
  214.     bsr.w    memo
  215.     bra.w    dealloc4        ;problemi sa memorijom
  216.  
  217. l7    move.l    d0,a3            ;spremi pointer
  218.     move.l    d0,pointers1
  219.     move.l    source,a4
  220.     
  221.     btst.b    #0,flag
  222.     bne.b    aa
  223.     move.l    a4,(a3)+
  224.  
  225. aa    move.l    no_of_lines,d0
  226.     add.l    d0,d0
  227.     moveq    #00,d1            ;alociraj prostor za duzine
  228.     jsr    allocmem(a6)        ;linija u bajtovima
  229.     tst.l    d0
  230.     bne.b    l8
  231.  
  232.     bsr.w    memo
  233.     bra.w    dealloc3
  234.  
  235. l8    move.l    d0,pointers2
  236. ;-------------
  237.     move.l    length,d0        ;vrati duzinu linija
  238.     move.l    pointers2,a2        ;vrati pointer u registar
  239.     moveq    #0,d2            ;obrisi prvi brojac znakova u redu
  240.     moveq    #10,d3            ;LINE FEED
  241.     btst.b    #0,flag            ;koje citanje filea koristiti
  242.     bne.b    read2
  243.  
  244. nije     subq.l    #1,d0            ;smanji brojac znakova
  245.     bmi.b    nema            ;ako smo procitali sve znakove
  246.     addq.w    #1,d2            ;brojac znakova + 1
  247.     cmp.b    (a4)+,d3        ;da li je znak LINE FEED
  248.     bne.b    nije            ;skoci ako nije LF
  249.  
  250.     move.w    d2,(a2)+        ;spremi broj znakova u memoriju
  251.     move.l    a4,(a3)+        ;spremi slijedecu adresu kao pointer
  252.     moveq    #0,d2            ;obrisi brojac
  253.     bra.b    nije
  254. ;-------------
  255. read2    move.l    d0,d5
  256.     moveq    #32,d1            ;SPACE
  257.     moveq    #01,d7
  258.     bra.b    b2
  259.  
  260. era    moveq    #0,d2            ;obrisi brojac znakova
  261.     subq.l    #1,d5            ;smanji duzinu filea
  262.     bra.b    b2
  263.         
  264. b1    subq.l    #1,d0            ;smanji brojac znakova
  265.     bmi.b    nema2            ;da li smo procitali sve znakove
  266.     addq.l    #1,a4            ;povecaj adresu
  267.     subq.l    #1,d5            ;smanji duzinu filea za 1
  268.  
  269. b2    cmp.b    (a4),d1            ;da li je SPACE
  270.     bge.b    b1            ;skace ako je d1>=(a4)
  271.  
  272.     move.l    a4,a0            ;sacuvaj pocetnu adresu
  273.  
  274. nije2     subq.l    #1,d0            ;smanji brojac znakova
  275.     bmi.b    nema2            ;da li smo procitali sve znakove
  276.     addq.w    #1,d2            ;brojac znakova + 1 (pomocni)
  277.     cmp.b    (a4)+,d3        ;da li je znak LINE FEED
  278.     bne.b    nije2            ;skoci ako nije LF
  279.  
  280.     cmp.w    d7,d2            ;da li je linija duzine 1,tj. samo LF
  281.     beq.b    era            ;ako je, ignoriraj
  282.     move.w    d2,(a2)+        ;spremi broj znakova u memoriju
  283.     move.l    a0,(a3)+        ;spremi tekucu adresu kao pointer
  284.     moveq    #0,d2            ;obrisi brojac
  285.     bra.b    b2
  286.  
  287. nema2    move.l    d5,length        ;spremi novu duzinu filea
  288. ;**********************************************************************
  289. nema    moveq    #-1,d7
  290.     cmp.b    (a4),d7
  291.     bne.b    l81
  292.     move.w    d2,(a2)+
  293.     move.l    a0,(a3)+
  294.  
  295. l81    jsr    output(a5)
  296.     move.l    d0,d1
  297.     move.l    #sorting,d2
  298.     moveq    #$0f,d3
  299.     jsr    write(a5)            ;write text "sorting..."
  300.  
  301.     move.l    no_of_lines,a4
  302.     move.l    a4,d0
  303.         
  304.     move.l    pointers1,a0
  305.     move.l    pointers2,a3
  306.     move.l    case,a5
  307.     moveq    #0,d3
  308.     btst.b    #1,flag
  309.     beq.b    a
  310.  
  311.     move.b    offset,d3
  312.     bra.b    a
  313.  
  314. ;d0=x, d1=i, d2=j, a4=n
  315.  
  316. zamjena    
  317.     movem.l    a1a2,a1/a2
  318.     move.l    (a2),d4
  319.     move.l    (a1),(a2)        ;1. pointer na mjesto drugog
  320.     move.l    d4,(a1)            ;2. pointer na mjesto prvog
  321.  
  322.     move.l    d6,a1            ;vrati adresu 1. operanda
  323.     move.l    d7,a2            ;vrati adresu 2. operanda
  324.     move.w    (a2),d4            ;zamijeni brojeve znakova u redu
  325.     move.w    (a1),(a2)        ;za dva reda koje mijenjas
  326.     move.w    d4,(a1)
  327.     bra.b    dalje
  328.  
  329. a    lsr.l    #1,d0            ;x dijeli sa 2
  330.     beq.w    gotovo            ;ako je x=0, zavrsi
  331.  
  332.     move.l    d0,d1            ;i=x
  333.     subq.l    #1,d1            
  334.  
  335. b    addq.l    #1,d1            ;i=i+1
  336.     cmp.l    a4,d1            ;da li je i=n
  337.     beq.b    a            ;ako je, skoci
  338.  
  339.     move.l    d1,d2            ;j=i
  340. dalje    sub.l    d0,d2            ;j=i-x
  341.     bmi.b    b            ;ako je j<0, skoci
  342.  
  343.     move.l    a3,d6            ;procitaj adrese duzina linija
  344.     add.l    d2,d6
  345.     add.l    d2,d6
  346.     move.l    d6,d7
  347.     add.l    d0,d7
  348.     add.l    d0,d7
  349.  
  350.     add.l    d2,d2
  351.     add.l    d2,d2            ;d2=d2*4; za longove
  352.     add.l    d0,d0
  353.     add.l    d0,d0            ;d0      -||-
  354.     move.l    a0,a1            ;a1=j - ti element
  355.     add.l    d2,a1
  356.     move.l    a1,a2
  357.     add.l    d0,a2            ;a2=j+x - ti element
  358.     movem.l    a1/a2,a1a2        ;spremi 1. i 2. pointer
  359.     move.l    (a1),a1            ;spremi adresu 1. operanda
  360.     move.l    (a2),a2            ;spremi adresu 2. operanda
  361.     add.l    d3,a1
  362.     add.l    d3,a2
  363.     asr.l    #2,d2            ;d2=d2/4
  364.     asr.l    #2,d0            ;d0=d0/4
  365.     jmp    (a5)
  366. ;------------- ignorira vrstu slova
  367. pon0    addq.l    #1,a1
  368.     addq.l    #1,a2
  369.  
  370. pon1    move.b    (a1),d4
  371.     move.b    (a2),d5
  372.     cmp.b    d4,d5
  373.     beq.b    pon0
  374.  
  375. pon11    cmp.b    #'A',d4            ;da li je uopce slovo
  376.     blt.b    pon2
  377.     bset.l    #5,d4            ;setiraj na malo slovo
  378.     cmp.b    #'z',d4
  379.     bgt.b    pon2
  380.  
  381.     cmp.b    #'A',d5            ;da li je uopce slovo
  382.     blt.b    pon2
  383.     bset.l    #5,d5            ;setiraj na malo slovo
  384.  
  385. pon2    cmp.b    d4,d5
  386.     bmi.w    zamjena
  387.     beq.b    pon0
  388.     bra.w    b
  389. ;------------- NE ignorira vrstu slova
  390. ponovo    cmpm.b    (a1)+,(a2)+        ;uspredjuje dva znaka
  391.     bmi.w    zamjena            ;ako je 2<1, zamijeni ih
  392.     beq.b    ponovo            ;ako je 1=2, ponovo usporedi
  393.     bra.w    b            ;ako je 1<2, usporedi slijedece redove
  394.  
  395. ;***********************************************************************
  396. gotovo    move.l    dosbase,a5
  397.     jsr    output(a5)
  398.  
  399.     move.l    d0,d1
  400.     move.l    #writing,d2
  401.     moveq    #$0f,d3
  402.     jsr    write(a5)        ;write text "writing..."
  403.  
  404.     move.l    size,d0
  405.     moveq    #00,d1
  406.     jsr    allocmem(a6)        ;alociraj prostor za sortirani file
  407.     tst.l    d0
  408.     bne.w    l9
  409.  
  410.     bsr.w    memo
  411.     bra.w    dealloc2
  412.  
  413. l9    move.l    d0,dest            ;spremi pointer odredisne memorije
  414.  
  415.     move.l    pointers1,a3        ;pointeri na linije
  416.     move.l    d0,a2            ;adresa prema kud kopiramo
  417.     move.l    pointers2,a0        ;adresa sa duzinama linija
  418.     move.l    no_of_lines,d2        ;adresa sa brojem linija
  419.  
  420.     move.w    #$fffc,d1        ;maska za izvlacenje prvih 6 bita, tj.
  421.                     ;za odredjivanje broja longova
  422.     moveq    #3,d3            ;3 bajta podataka i maska %00000011
  423.     moveq    #10,d4            ;LINE FEED    
  424.  
  425. jos    tst.l    d2            ;da li je brojac linija = 0
  426.     beq.b    next            ;ako je, zavrsi
  427.     move.l    (a3)+,a1        ;stavi pointer aktualnog reda u a1
  428.     move.w    (a0)+,d0        ;procitaj duzinu linije
  429.     subq.l    #1,d2            ;smanji brojac linija za 1
  430.     cmp.w    d3,d0            ;uspredi sa 3
  431.     ble.b    x            ;ako je <= 3, skoci
  432.  
  433. long    move.w    d0,d6            ;privremeno spremi
  434.     and.w    d1,d0            ;ocisti broj znakova sa maskom %11111100
  435.     lsr.w    #2,d0            ;i eliminiraj 2 zadnja desna bita
  436.  
  437. jos2    move.l    (a1)+,(a2)+        ;kopiraj potrebni broj longova
  438.     subq.w    #1,d0            ;smanji broj longova za 1
  439.     bne.b    jos2            ;vrti petlju
  440.     
  441.     and.w    d3,d6            ;sacuvaj dva desna bita
  442.     beq.b    jos            ;ako nema znakova, idi dalje
  443.  
  444. x    move.b    (a1),(a2)+        ;iskopiraj znak
  445.     move.b    (a1)+,d6        ;buffer za aktualni bajt podatka
  446.     cmp.b    d4,d6            ;da li je znak=LINE FEED,
  447.     bne.b    x            ;nije, jos kopiraj
  448.     bra.b    jos            ;je, idi dalje
  449.  
  450. ;***********************************************************************
  451. next    move.l    #izlaz,d1
  452.     move.l    #1006,d2
  453.     jsr    open(a5)        ;open output file
  454.     tst.l    d0
  455.     beq.w    error2            ;output file error
  456. ;-------------
  457.     move.l    d0,d1            ;file pointer
  458.     move.l    d0,-(a7)        ;privremeno spremi
  459.     move.l    dest,d2            ;adresa
  460.     move.l    length,d3        ;duzina filea
  461.     jsr    write(a5)        ;write output file
  462. ;-------------
  463.     move.l    (a7)+,d1
  464.     jsr    close(a5)        ;close output file
  465. ;-------------
  466.     jsr    output(a5)
  467.     move.l    d0,d1
  468.     move.l    #done,d2        ;obrisi poruke
  469.     moveq    #$10,d3
  470.     jsr    write(a5)
  471.     
  472. dealloc1
  473. ;-------------
  474.     move.l    size,d0
  475.     move.l    dest,a1
  476.     jsr    freemem(a6)        ;oslobodi dest memoriju
  477. dealloc2
  478. ;-------------
  479.     move.l    no_of_lines,d0
  480.     move.l    pointers2,a1        ;oslobodi prostor za duzine
  481.     add.l    d0,d0
  482.     jsr    freemem(a6)        ;linija u bajtovima
  483. dealloc3
  484. ;-------------
  485.     move.l    size2,d0
  486.     move.l    pointers1,a1
  487.     jsr    freemem(a6)        ;oslobodi prostor polja pointera
  488. dealloc4
  489. ;-------------
  490.     move.l    size,d0
  491.     move.l    source,a1
  492.     jsr    freemem(a6)        ;oslobodi source memoriju
  493. ;-------------
  494. kraj2    move.l    a5,a1
  495.     jsr    closelibrary(a6)    ;close dos.library
  496.     movem.l    (a7)+,d1-d7/a1-a6
  497.     moveq    #0,d0
  498.     rts
  499. ;***********************************************************************
  500. kraj    bsr.b    ekran            ;pointer je u d1
  501.     move.l    #logo,d2
  502.     move.l    #$160,d3
  503.     jsr    write(a5)        ;write text poruka
  504.  
  505.     bra.b    kraj2
  506.  
  507. error1    bsr.b    ekran
  508.     move.l    #greska1,d2
  509.     moveq    #22,d3
  510.     jsr    write(a5)        ;write text input error
  511.  
  512.     bra.b    dealloc4
  513.  
  514. error2    bsr.b    ekran
  515.     move.l    #greska2,d2
  516.     moveq    #22,d3
  517.     jsr    write(a5)        ;write text output error
  518.  
  519.     bra.w    dealloc1
  520.  
  521. ;-------------
  522. ekran    jsr    output(a5)
  523.     tst.l    d0
  524.     beq.b    .ekr2
  525.     move.l    d0,d1
  526.     rts
  527.  
  528. .ekr2    move.l    (a7)+,d0
  529.     jmp    kraj2
  530.  
  531. ;-------------
  532. error11    move    #$108,d0        ;kod rada sa lock-om
  533.     move.l    a4,a1
  534.     jsr    freemem(a6)
  535.  
  536. memo    bsr.b    ekran
  537.     move.l    #greska3,d2
  538.     moveq    #20,d3
  539.     jsr    write(a5)
  540.     rts
  541.  
  542. string    movem.l    d1-d3/a1,-(a7)        ;pocetnu adresu i pomocne registre
  543.                     ;privremeno spremi na stack
  544.     moveq    #10,d1            ;LINE FEED
  545.     moveq    #32,d2            ;SPACE
  546.     clr.b    d0            ;obrisi brojac
  547. .a    move.b    (a0),d3
  548.     cmp.b    d2,d3            ;da li je znak SPACE
  549.     beq.b    .b
  550.     cmp.b    d1,d3            ;da li je znak LINE FEED
  551.     beq.b    .c
  552.     tst.l    d3            ;da li je znak NULL
  553.     beq.b    .c
  554.     move.b    (a0)+,(a1)+        ;kopiraj znak
  555.     addq.b    #1,d0            ;dodaj 1 broju procitanih znakova
  556.     bra.b    .a
  557. .b    addq.l    #1,a0            ;povecaj adresu
  558.     cmp.b    (a0),d2            ;da li je jos SPACE
  559.     beq.b    .b            ;ako nije, stani
  560. .c    clr.b    (a1)            ;na kraj stavi NULL
  561.     addq.l    #1,d0            ;dodaj 1 broju procitanih znakova
  562.     movem.l    (a7)+,d1-d3/a1        ;vrati pocetnu adresu sa stacka
  563.                     ;zajedno sa koristenim registrima
  564.     rts
  565.  
  566. ;------------------------------------------------------------------------------    
  567. doslib    dc.b    "dos.library",0
  568. ulaz    ds.b    100
  569. izlaz    ds.b    100
  570. buff    ds.b    100
  571. logo    dc.b    10,"Shellsort V1.14 ",10                     ;18
  572.     dc.b    "   Made by ONE MAN GANG ",10,10                 ;26
  573.     dc.b    "E-mail: drazen.herendic@etf.hr",10,10                 ;32
  574.     dc.b    "USAGE: Shellsort [-n] [-oX] [-c] input_file output_file ",10,10 ;58
  575.     dc.b    "  -n leading spaces and control characters are ignored ",10     ;56
  576.     dc.b    "     (tabs, line feeds, form feeds, etc.) ",10,0         ;44
  577.     dc.b    "  -oX X is offset from beginning of line (new reference) ",10     ;58
  578.     dc.b    "  -c case insensitive sorting (default is case sensitive) ",10,0 ;60
  579. ;         1---5----0----5----0----5----0----5----0----5----0
  580. reading    dc.b    "Reading...",0,0
  581. sorting    dc.b    $9b,$31,$30,$44,"Sorting...",0,0
  582. writing    dc.b    $9b,$31,$30,$44,"Writing...",0,0
  583. done    dc.b    $9b,$31,$30,$44,"Done !    ",10,0
  584. greska1    dc.b    10,"Input file error ! ",10,0
  585. greska2    dc.b    10,"Output file error !",10,0
  586. greska3    dc.b    10,"Memory problems !",10,0
  587. version    dc.b    "$VER: shellsort 1.14 (14.7.94)"
  588.     even
  589. a1a2    ds.b    8
  590. case    dc.l    0
  591. dosbase    dc.l    0            ;samo ime kaze sve
  592. length    dc.l    0            ;duzina ucitanog filea
  593. source    dc.l    0            ;adresa gdje se ucitava file
  594. dest    dc.l    0            ;adresa gdje se sprema sortirani file
  595. pointers1    dc.l    0        ;polje pointera za adrese linija
  596. pointers2    dc.l    0        ;pointer za duzine linija u bajtima
  597. no_of_lines    dc.l    0        ;broj linija, tj. pointera
  598. flag    dc.b    0
  599.     even
  600. size    dc.l    0
  601. size2    dc.l    0
  602. offset    dc.b    0
  603.     even
  604.